Add dependency graph export - #3648
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a8fd05b8d4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Code reviewReviewed the diff, docs, and new tests. Overall this is a clean, well-integrated addition — the CLI parsing follows the existing Two independent bug/logic passes over the diff turned up no confirmed high-signal bugs. One candidate finding was investigated and ruled out as a false positive, noted below for transparency, plus one design suggestion worth considering. Investigated and ruled out
Suggestion: avoid the escape/un-escape-separator trick for graph labelsIn This works for today's inputs, but it's fragile because the escaping and the "protect this one substring" step are coupled by string-matching rather than by construction. If a module's A more robust approach: escape each label part independently, then join with the raw separator afterward, so there's no need to special-case unescape the joiner at all: private static string BuildLabel(DependencyGraphNode node, string separator, Func<string, string> escape)
{
var parts = new List<string> { node.Name };
// ...
return string.Join(separator, parts.Select(escape));
}This removes the "escape everything, then carefully un-break the one string I need intact" ordering dependency entirely — each part is escaped in isolation before the structural separator is introduced, so the separator can never collide with escaped user content regardless of what a category or skip-reason string contains. No other issues found. Nice addition — the programmatic ( |
Code reviewRe-reviewed at the current head ( Both findings from the previous review have been correctly addressed:
I re-read the rest of the current diff (CLI
No further issues found. Nice work addressing the feedback. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b88bdef26a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2d310dcf70
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Code reviewRe-reviewed at the current head ( What changed
Design note worth considering: the registrar now does real work a second time on the GitHub summary path
In the normal run path, this is now called twice within the same pipeline execution:
No other issues found in the delta. Nice, well-tested fix for the history-skip case. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1f1b091db0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Code reviewRe-reviewed at the current head ( What changed
Investigated, not flaggedI looked hard at three candidate issues in this delta and ruled each out after digging into the surrounding engine code (not just the diff):
Still open from the previous review (non-blocking)The memoization note from the last round about No high-signal issues found in this delta. Nice, well-tested fixes. |
|
Addressed both fresh P2 findings in 3a8b2bc and synced current main in �3f5a5f020. Post-sync validation:
Fresh threads remain open for the next review cycle. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a3f5a5f020
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Code reviewRe-reviewed at the current head ( What changed
Separately, Both correctly close the two Codex threads that were still open at the last review. Good, targeted fixes with matching regression tests. Issue found: docs are now out of sync with the
|
|
Addressed both fresh P2 findings in c4991a197 and synced current main in d9d5757. Post-sync validation:
Fresh threads remain open for the next review cycle. |
Code reviewRe-reviewed at the current head ( Docs fix confirmedThe What changed
Issue found: evaluating
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d9d5757653
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Addressed the fresh P1/P2 findings in b874e7b. Validation:
Fresh threads remain open for the next review cycle. |
Code reviewRe-reviewed at the current head ( Latest commit (
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b874e7b96b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Addressed the two fresh graph-planning P2 findings in 55bfb8f. Validation:
The four prior threads were resolved after this later review cycle confirmed their fixes. Today's fresh threads remain open for the next cycle. |
Code reviewRe-reviewed at the current head ( Prior findings: confirmed fixed
Residual (narrowed, not eliminated): sync
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 55bfb8f2ca
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 69585a3458
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Code reviewRe-reviewed at the current head ( What changed, and why it matters
This fixes a real correctness bug, not just a cache-hygiene nit. The new test The Validation
Prior open itemsThe architectural note from the previous review (extracting a shared No new high-signal bugs in this delta. Good, well-tested fix for a genuine latent-cache-poisoning bug. |
|
Addressed both graph findings in 1988853: planning history resolution is mutation-free, and registered dynamic dependencies are exported. Validation: DependencyGraphExporterTests 15/15; related registrar/provider tests 2/2; core Release build clean; changed-file format clean. |
Code reviewRe-reviewed at the current head ( What changed, verified correct"Keep graph planning from completing runtime module results" (P1). "Include registered dynamic dependencies in exported edges" (P2). Both fixes are targeted, match the reported failure modes, and have matching regression tests. I independently re-read
No new issues found in this delta. This PR has been through an unusually thorough review cycle (many rounds of |
Code reviewRe-reviewed at the current head ( Confirmed: this delta correctly closes out prior findings
One follow-up worth tracking (not a blocker)The new "reject unknown virtual receivers" guard ( No other issues found in this delta. |
|
Codex Review: Didn't find any major issues. Can't wait for the next one! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Required pipeline failed on an unrelated HTTP replay timeout test; rerunning failed jobs once. |
|
Refreshed from current main in 3aa5cde after the second shared-suite CI failure. Resolved CLI overlaps by preserving dependency-graph export alongside current help bypass, typo guidance, and dry-run success status. Validation: PipelineCommandLineTests 73/73; core Release build 0 warnings/errors. |
Code reviewRe-reviewed at the current head ( This delta: a clean main-sync, no PR-specific changesThe only new commits are the merge itself and I checked the merge conflict resolution specifically for regressions in this PR's own
No new bugs and no CLAUDE.md violations in this delta. Separate from this specific delta: this PR is now at ~70 automated review rounds over roughly 24 hours, almost all titled "fix(graph): isolate/preserve/guard planning ...". That pattern is worth a human look — either the remaining issues are genuinely this subtle, or the loop is chasing diminishing returns and would benefit from a manual pass instead of another automated round. |
Code reviewRe-reviewed at the current head ( This delta: another clean main-sync, no PR-specific changesThe only new commit is the merge itself, bringing in unrelated I checked the conflict-adjacent files the PR also owns for regressions:
No new bugs and no CLAUDE.md violations in this delta. Not new, but repeating briefly for visibility since it's unaddressed and this is now ~75 commits / 24+ hours in: the standing architectural concern about |
|
Refreshed from current main after the required shared-suite failure. Review threads are all resolved; the standing IL-analysis architecture note remains explicitly non-blocking. Validation: DependencyGraphExporterTests 117/117, PipelineCommandLineTests 75/75, and core Release build with 0 warnings/errors. |
|
Addressed both current CodeFactor complexity findings at |
Code reviewRe-reviewed at the current head ( This delta: a CodeFactor complexity fix, behavior-preservingTwo files changed, both extract-method refactors with no logic changes:
CodeFactor now reports the complexity issue fixed, and the referenced validation ( Not new, but noting again for visibility: this PR is now at 57 commits / 63 automated review rounds over roughly 52 hours. The individual deltas (like this one) keep coming back clean, which suggests the remaining churn is CI/CodeFactor/main-sync noise rather than substantive issues — this is probably close to mergeable and would benefit from a human decision to stop the loop rather than another automated round. |
|
Merged current main. Resolved Module by preserving dependency-graph planning-copy support while adopting main's internal execution contract. Core Release build passes (0 warnings/errors); the core test project is currently blocked by unrelated main RunReportTests references to removed PipelineOptions properties. |
Code reviewRe-reviewed at the current head ( Merge conflict resolution in
|
|
@codex review |
|
@claude review |
Code review — re-review at current head (
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 79ea2f9aba
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| string path, | ||
| CancellationToken cancellationToken = default) | ||
| { | ||
| await using var pipeline = await builder.BuildAsync().ConfigureAwait(false); |
There was a problem hiding this comment.
Bypass runtime validation for graph-only builds
When this graph-only helper is used on a pipeline with a custom DependsOnBaseAttribute, the normal BuildAsync path still runs full dependency validation before the graph-safe exporter is reached; that validation calls ModuleDependencyValidator/ModuleDependencyResolver with planningSafeOnly: false, constructing the attribute and invoking ShouldDependOn. The exporter itself now defers those predicates, but this new entry point can still mutate shared/static state or throw during graph export before any module execution, so graph builds need a planning-safe build/validation path rather than the regular runtime validation path.
Useful? React with 👍 / 👎.
|
Refreshed onto current main after the prior Ubuntu full-suite host ended without a failing-test summary (core test exit 2, workflow exit 134). The refresh exposed four obsolete direct-IModule fixture expectations; current main rejects those registrations before planning, so the tests now assert that contract without activating/configuring the invalid modules. Validation on 8b60cdf: DependencyGraphExporterTests 117/117 and ModularPipelines.slnx Release build succeeded with 0 warnings/errors. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8b60cdf997
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| try | ||
| { | ||
| var moduleContext = new ModuleContext( | ||
| scopedServices.GetRequiredService<IPipelineContext>(), |
There was a problem hiding this comment.
Use planning modules for graph skip-condition contexts
When a synchronous WithSkipWhen evaluated for graph export calls context.GetModuleIfRegistered<T>() (for example, an optional-dependency presence check), this context is resolved from the real service provider, whose ModuleLookup contains the runtime modules rather than the planning copies. GetModuleIfRegistered is not blocked by moduleResultAccessAllowed, so otherwise planning-safe callbacks have to be rejected by the scanner; if a custom planning copy reaches evaluation, the callback can receive and mutate the runtime module before RunAsync. Use a planning IPipelineContext/ModuleLookup for these evaluations or block optional module access consistently.
Useful? React with 👍 / 👎.
|
Warning Review limit reached
Next review available in: 53 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (58)
Comment |
Closes #3539
Adds canonical dependency-graph export in Mermaid, DOT, and JSON;
--graphCLI support; builder/pipeline APIs; annotated nodes; GitHub step-summary flowchart; documentation and regression coverage.Validation:
ModularPipelines.slnRelease build: 0 warnings/errorsModularPipelines.GitHub.slnRelease build: 0 warnings/errors